package com.skyline.spot.service;

import java.util.List;

import com.skyline.base.type.Activity;
import com.skyline.base.type.SpotType;
import com.skyline.common.bean.Page;
import com.skyline.spot.model.Spot;
import com.skyline.user.model.User;

public interface SpotService {

	/**
	 * 创建点
	 * 
	 * @param user
	 *            创建者
	 * @param spot
	 *            点信息
	 * @return
	 */
	public Long discoverySpot(User user, Spot spot);

	/**
	 * 更新点信息
	 * 
	 * @param spot
	 */
	public void updateSpotInfo(Spot spot);

	/**
	 * 更新点说明函数，由于点的描述更新的比较平凡，所以单独提出
	 * 
	 * @param spotId
	 * @param content
	 */
	public void updateSpotIntroduction(Long spotId, String content);

	/**
	 * 更新点说明函数，由于点的描述更新的比较平凡，所以单独提出
	 * 
	 * @param spotId
	 * @param portrait
	 */
	public void updateSpotPortrait(Long spotId, String portrait);

	/**
	 * 浏览量记录函数
	 * 
	 * @param spotId
	 */
	public void addVisitNum(Long spotId);

	/**
	 * 更改点管理员
	 * 
	 * @param spotId
	 * @param user
	 */
	public void changeAdministrator(Long spotId, User oldAdministrator,User newAdministrator);

	/**
	 * 点浏览函数，用于显示点主页
	 * 
	 * @param spotId
	 * @return
	 */
	public Spot view(Long spotId);
	
	/**
	 *  获取spot
	 * 
	 * @param spotId
	 * @return
	 */
	public Spot getSpot(Long spotId);

	/**
	 * 删除
	 * 
	 * @param spotId
	 */
	public void deleteSpot(Long spotId);

	/**
	 * 判断是否存在同名
	 * 
	 * @param spotName
	 * @return
	 */
	public boolean isExist(String spotName);

	/**
	 * 点的评分函数
	 * 
	 * @param spotId
	 * @param star
	 * @return 评分之后的spoId,评分人数voters，分值star
	 */
	public Spot votes(Long spotId, Integer star);

	/**
	 * 根据名称，城市查找
	 * 
	 * @param name
	 * @return
	 */

	public List<Spot> findByName(String name, SpotType type, Activity activity);

	/**
	 * 根据类型查找所有景点
	 * 
	 * @param spotType
	 * @param page
	 * @return
	 */
	public List<Spot> findAll(SpotType type, Page page, Activity activity);

	/**
	 * 国家范围内查找
	 */
	public List<Spot> findByCountry(String countryId, SpotType type, Page page,
			Activity activity);

	/**
	 * 省级范围内查找
	 */
	public List<Spot> findByProvince(String provinceId, SpotType type,
			Page page, Activity activity);

	/**
	 * 市级范围内查找
	 */
	public List<Spot> findByCity(String cityId, SpotType type, Page page,
			Activity activity);

}
